bf7ee5875c9175d317efeadc8b4d0a7510bf3309,src/org/jgroups/protocols/FC.java,FC,handleCredit,#Address#,290
Before Change
log.trace(sb.toString());
}
if(creditors.size() == 0) {
unblockSender(); // triggers sent.notifyAll()...
}
}
}
After Change
private void handleCredit(Address sender) {
if(sender == null) return;
StringBuffer sb=null;
boolean unblock=false;
synchronized(sent) {
if(log.isTraceEnabled()) {
Long old_credit=(Long)sent.get(sender);
sb=new StringBuffer();
sb.append("received credit from ").append(sender).append(", old credit was ").
append(old_credit).append(", new credits are ").append(max_credits).
append(".\nCreditors before are: ").append(printCreditors());
}
sent.put(sender, new Long(max_credits));
if(creditors.size() > 0) { // we are blocked because we expect credit from one or more members
removeCreditor(sender);
if(log.isTraceEnabled()) {
sb.append("\nCreditors after removal of ").append(sender).append(" are: ").append(printCreditors());
log.trace(sb.toString());
}
if(creditors.size() == 0) {
unblock=true;
}
}
}
if(unblock) // moved this outside of the 'sent' synchronized block
unblockSender();
}